# 编写装饰器来实现，对目标函数进行装饰，分3种情况：目标函数无参数无返回值，目标函数有参数，目标函数有返回值；
#      三个目标函数分别为：
#      A 打印输出20000之内的素数；
#      B 计算整数2-10000之间的素数的个数；
#      C 计算整数2-M之间的素数的个数；

from math import sqrt

def prime( num ):
    if num in [0, 1]:
        return False
    if num == 2:
        return True
    for i in range( 2, int( sqrt(num) + 1 ) ):
        if num % i == 0:
            return False
    return True

def useless( func ):
    def inner(*args, **kwargs ):
        print( '%s你被强化了' %( func.__name__ ) )
        print( func( *args, **kwargs ) )
    return inner

@useless
def A():
    for num in range( 2, 20000 ):
        if prime( num ):
            print( num, end = '  ' )

@useless
def B():
    Bnumbers = []
    for num in range( 2, 10000 ):
        if prime( num ):
            Bnumbers.append( num )
    return len(Bnumbers)

@useless
def C( M ):
    Cnumbers = []
    for num in range( 2, M ):
        if prime( num ):
            Cnumbers.append( num )
    return len(Cnumbers)


A()
B()
C( 10000 )